home *** CD-ROM | disk | FTP | other *** search
/ ShareWare OnLine 2 / ShareWare OnLine Volume 2 (CMS Software)(1993).iso / elecmail / fido1000.zip / SRC1000.ZIP / DATEMATH.C next >
C/C++ Source or Header  |  1993-05-21  |  3KB  |  141 lines

  1. #define EDAYOFFS 31717L
  2.  
  3. #include <dos.h>
  4.  
  5.  
  6. /* function to convert date to an integer */
  7. long int condate(year,month,day)
  8. int year; /* year passed */
  9. int month; /* month passed */
  10. int day; /* day passed */
  11. {
  12.     int y1; /* century part of year */
  13.     int y2; /* rest of year */
  14.     int c1,yr; /* temp variables */
  15.     long int l; /* temp variables */
  16.     if(year > 100)
  17.     {
  18.         y1 = year / 100;
  19.         y2 = year % 100;
  20.     } else
  21.     {
  22.         y1 = 19;
  23.         y2 = year;
  24.     }
  25.     /* year range check */
  26.     if((y1 < 0) || (y1 > 99)) return(0);
  27.     /* month range check */
  28.     if((month < 1) || (month > 12)) return(0);
  29.     /* day range check */
  30.     if((month == 4) || (month == 6) || (month == 9) ||
  31.         (month == 11)) c1 = 30;
  32.     else c1 = 31;
  33.     if(month == 2)
  34.         c1 = 29;
  35.     if((day < 1) || (day > c1)) return(0);
  36.     yr = y1*100+y2 -1900;
  37.     if(month > 2)
  38.         month -= 3;
  39.     else
  40.     {
  41.         month += 9;
  42.         yr--;
  43.     }
  44.     l = (((long)1461 *(long)yr) / (long)4) + ((153 * month + 2) / 5) + day - 1;
  45.     return(l);
  46. }
  47.  
  48. /* get the day month and year of the julian date
  49.  * returns : 0    ok
  50.  *          -1    bad input
  51.  */
  52. int yr_mo_da(julian,year,month,day)
  53. long int julian;
  54. int *year;
  55. int *month;
  56. int *day;
  57. {
  58.     long int te;   /* temporary variable */
  59.  
  60.     if (julian < 1 ) return(-1);
  61.     te = 4 * julian + 3;
  62.     *year =  (int) (te / 1461);
  63.     *day = (int) (te - ((*year) * 1461));
  64.     *year += 1900;
  65.     *day =  ((*day) / 4) + 1;
  66.     te = 5 * (*day) - 3;
  67.     *month = (int) (te / 153);
  68.     *day = (int) (te - ((*month) * 153));
  69.     *day = ((*day) / 5) + 1;
  70.     if ((*month) < 10)
  71.     {
  72.         *month += 3;
  73.     } else
  74.     {
  75.         *month -= 9;
  76.         (*year)++;
  77.     }
  78.     return(0);
  79. }
  80.  
  81. int month(julian)
  82. long julian;
  83. {
  84.     int year;
  85.     int mo;
  86.     int day;
  87.     int i;
  88.     if ((i = yr_mo_da(julian,&year,&mo,&day)) < 0)
  89.         return(i);
  90.     else
  91.         return(mo);
  92. }
  93.  
  94. int year(julian)
  95. long julian;
  96. {
  97.     int yr;
  98.     int month;
  99.     int day;
  100.     int i;
  101.     if ((i = yr_mo_da(julian,&yr,&month,&day)) < 0)
  102.         return(i);
  103.     else
  104.         return(yr);
  105. }
  106.  
  107. int day(julian)
  108. long julian;
  109. {
  110.     int yr;
  111.     int month;
  112.     int da;
  113.     int i;
  114.     if ((i = yr_mo_da(julian,&yr,&month,&da)) < 0)
  115.         return(i);
  116.     else
  117.         return(da);
  118. }
  119.  
  120. int eday(julian)
  121. long julian;
  122. {
  123.     register int temp;
  124.  
  125.     temp = (int) (julian - EDAYOFFS);
  126.     return(temp);
  127. }
  128.  
  129. long int jday_today()
  130. {
  131.     struct dosdate_t date;
  132.  
  133.     _dos_getdate(&date);
  134.     return( condate(date.year,date.month,date.day) );
  135. }
  136.  
  137. int eday_today()
  138. {
  139.     return( (int) (jday_today() - EDAYOFFS) );
  140. }
  141.